Regardless of the recent advances in memory speed and size, software developers continue to struggle with efficient memory usage. Today, applications or, more generally, programs, are incredibly robust and they require excessive amounts of memory to meet performance and functional goals. Excessive/inordinate memory usage occurs for various reasons. One major reason is that software developers often construct or implement data models without understanding the implications of these decisions on memory as the program runs. More particularly, software developers may create frameworks in ways not intended by framework developers, and vice versa. Additional opportunities for inefficient memory use occur in the deployment stage of software, when a developer must establish policies on caching mechanisms (e.g., cache capacity and time-out intervals). Even with sufficient planning, a developer cannot clearly assess the run-time consequences of coding and/or deployment decisions because it is difficult to achieve a good balance of dynamic time and space trade-offs while only having source code and framework documentation.
The key to evaluating the efficiency of a program is to assess memory use. Attempts have been made to evaluate memory usage by sizing up the data structures found within the memory. However, these attempts apply a strictly static notion of size. Conventional techniques consider data structures in the sense of the C language, i.e., the size of a structure is the sum of those fields statically defined by structure type. Unfortunately, this method fails to provide any useful information on the overall efficiency of memory usage.
Current conventional techniques utilize three types of memory content summaries. First, there are tools which show the size of data structures within memory. Second, there are tools which create histograms of the content within memory. Third, there are tools that allow the user to browse the contents of the memory. These approaches are impractical for a number of reasons. For example, the techniques are either too coarse in their description of memory, as in the first summary, or too detailed, as in the third summary. Their main shortfall is the inability to create a useful summary for assessing efficient memory use.